package com.svs.common.service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.svs.system.cache.SysDicCache;
import com.svs.system.domain.SysDictData;
import com.svs.system.service.SysDictDataService;

/**
 * 框架首创 html调用 thymeleaf 实现字典读取
 * 
 * @author dujianqiao
 */
@Service("dict")
public class DictService {
	@Autowired
	private SysDictDataService dictDataService;

	/**
	 * 根据字典类型查询字典数据信息
	 * 
	 * @param dictType
	 *            字典类型
	 * @return 参数键值
	 */
	public List<SysDictData> getType(String dictType) {
		return SysDicCache.getCache().getType(dictType) ;
	}
	
	
	/**
	 * 根据字典类型查询字典数据信息
	 * 
	 * @param dictType
	 *            字典类型
	 * @return 参数键值
	 */
	public List<SysDictData> getType(String dictType,Long parentCode) {
		return SysDicCache.getCache().getChildrenList(dictType,parentCode) ;
	}
	
	
	/**
	 * 根据字典类型查询字典数据信息
	 * 
	 * @param dictType
	 *            字典类型
	 * @return 参数键值
	 */
	public List<SysDictData> getTypeTree(String dictType) {
		List<SysDictData> list = SysDicCache.getCache().getType(dictType);
		//处理数据
		List<SysDictData> rootList = new ArrayList<>();
		Map<Long,List<SysDictData>> dataMap = new HashMap<>();
		list.forEach(tem->{
			if(tem.getParentCode()==0){//根节点
				rootList.add(tem);
			}else{
				List<SysDictData> temList = dataMap.get(tem.getParentCode());
				if(null==temList){
					temList = new ArrayList<>();
					dataMap.put(tem.getParentCode(),temList);
				}
				temList.add(tem);
			}
		});
		//将子节点放到对应的list中去
		list.forEach(tem->{
			tem.setSubList(dataMap.get(tem.getDictCode()));
		});
		return rootList ;
	}
	
	
	/**
	 * 根据字典类型查询字典数据信息
	 * 
	 * @param dictType
	 *            字典类型
	 * @return 参数键值
	 */
	public List<SysDictData> getFirstType(String dictType) {
		return SysDicCache.getCache().getFirstType(dictType) ;
	}
	

	/**
	 * 根据字典类型和字典键值查询字典数据信息
	 * 
	 * @param dictType
	 *            字典类型
	 * @param dictValue
	 *            字典键值
	 * @return 字典标签
	 */
	public String getLabel(String dictType, String dictValue) {
		return dictDataService.selectDictLabel(dictType, dictValue);
	}
}
